package search.util;

import java.util.Comparator;
import java.util.NoSuchElementException;

public class PriorityQueue<T> implements IQueue<T> {
	  
	  
	public PriorityQueue(Comparator<T> cmp){
		comp=cmp;
	}
	private Comparator<T> comp;
	private MeinKnoten<T> start = new MeinKnoten<T>(null);
    
	




	public void clear() 
	{
	start.naechstes=null;	
	}

	
	
	
	
	public T get() {
		T back=null;
		if (start.naechstes != null) 
			{
			back = start.naechstes.element;
			start.naechstes = start.naechstes.naechstes;
			}
		else throw new NoSuchElementException();
		return back;				
	}

	
	
	
	public boolean isEmpty() {
		 return start.naechstes==null;
	}

	
	
	
	
	public void put(T p) {
		MeinKnoten<T> test=new MeinKnoten<T>(null);
		MeinKnoten<T> neu=new MeinKnoten<T>(p);
		
		
		if (start.naechstes==null) start.naechstes=neu;	
			else 
			{
			test.naechstes=start;
			while ((test.naechstes.naechstes != null) && (compare(test.naechstes.naechstes.element,neu.element) <0))
				{
				test.naechstes=test.naechstes.naechstes;
				}
			
			neu.naechstes=test.naechstes.naechstes;
			test.naechstes.naechstes=neu;
			}
			
	}
	
	@SuppressWarnings("unchecked")
	public int compare(Object o1, Object o2) {
        //return ((Double) o1).compareTo((Double) o2);
		return comp.compare((T)o1,(T) o2);
    }

}
